package mx.frantor.catalogos.daoimp;

import java.util.List;
import java.util.StringTokenizer;

import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import flex.messaging.io.ArrayCollection;

import mx.frantor.catalogos.dao.OrdenDeProduccionDAO;
import mx.frantor.catalogos.entitys.CatalogoProductoEntity;
import mx.frantor.catalogos.entitys.OrdenDeProduccionEntity;
import mx.frantor.catalogos.entitys.OrdendeProduccionProductosEntity;
import mx.frantor.catalogos.entitys.PedidosEntity;
import mx.frantor.catalogos.entitys.ProductosExistenciasEntity;
import mx.frantor.util.HibernateUtil;

public class OrdenDeProduccionDAOImpl implements OrdenDeProduccionDAO {

	@Override
	public String agregarOrdenDeProduccio(
			OrdenDeProduccionEntity nuevoOrdenDeProduccion) {
		String e = "";
		Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();
		
		session.beginTransaction();
		try {
		session.save(nuevoOrdenDeProduccion);
		session.flush();
		session.getTransaction().commit();
		e = nuevoOrdenDeProduccion.getIdOrdenProd().toString();
		} catch (Exception x) {
			//e.printStackTrace();
			session.getTransaction().rollback();
			e = x.getMessage();
			//return e.toString();
		}
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		System.out.println("agregar orden de produccion resultado " + e);

		return e;
	}

	@Override
	public String modificarOrdenDeProduccio(
			OrdenDeProduccionEntity modificarOrdenDeProduccion) {
		String e = "";
		Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();
	
		session.beginTransaction();
		try {
			OrdenDeProduccionEntity ordenProdTemp = (OrdenDeProduccionEntity) session.get(
					OrdenDeProduccionEntity.class, modificarOrdenDeProduccion.getIdOrdenProd());
		session.flush();
		session.evict(ordenProdTemp);
		session.update(modificarOrdenDeProduccion);
		session.getTransaction().commit();
		} catch (Exception x) {
			//e.printStackTrace();
			session.getTransaction().rollback();
			e = x.getMessage();
			//return e.toString();
		}
		HibernateUtil.getSessionFactory().getCurrentSession().close();

		System.out.println("modificar orden de produccion resultado " + e);

		return e;
	}
	
	@Override
	public String directoOrdenDeProduccio(Long idOrdProduccion, String Estatus, Long idMaquinaria, String Encargado) {
		String e = "";
		Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();
	
		session.beginTransaction();
		try {
			OrdenDeProduccionEntity ordenProdTemp = (OrdenDeProduccionEntity) session.get(
					OrdenDeProduccionEntity.class, idOrdProduccion);
		session.flush();
		session.evict(ordenProdTemp);
		ordenProdTemp.setEstatus(Estatus);
		ordenProdTemp.setIdMaquinaria(idMaquinaria);
		ordenProdTemp.setEncargado(Encargado);
		session.update(ordenProdTemp);
		session.getTransaction().commit();
		} catch (Exception x) {
			//e.printStackTrace();
			session.getTransaction().rollback();
			e = x.getMessage();
			//return e.toString();
		}
		System.out.println("directo orden de produccion resultado " + e);

		HibernateUtil.getSessionFactory().getCurrentSession().close();

		return e;
	}

	@Override
	public String eliminarOrdenDeProduccio(Integer idOrdenDeProduccio) {
		String e = "";
		Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();
		

			// TODO Auto-generated method stub			
			session.beginTransaction();
			try {
				OrdenDeProduccionEntity OrdenDeProdElimina = (OrdenDeProduccionEntity) session.get(
						OrdenDeProduccionEntity.class, idOrdenDeProduccio);
			session.delete(OrdenDeProdElimina);
			session.getTransaction().commit();
		} catch (Exception x) {
			//e.printStackTrace();
			session.getTransaction().rollback();
			e = x.getMessage();
			//return e.toString();
		}
		//HibernateUtil.getSessionFactory().getCurrentSession().close();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		System.out.println("eliminar orden de produccion resultado " + e);

		return e;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<OrdenDeProduccionEntity> getTodoOrdenesDeProduccio() {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<OrdenDeProduccionEntity> OrdenProd = session.createCriteria(OrdenDeProduccionEntity.class)
				.addOrder(Order.asc("IdOrdenProd")).list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		return OrdenProd;
	}

	@SuppressWarnings("unchecked")
	@Override
	public OrdenDeProduccionEntity getOrdenDeProduccioId(
			long idOrdenDeProduccio) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<OrdenDeProduccionEntity> OrdenProd = (List<OrdenDeProduccionEntity>) session.createCriteria(OrdenDeProduccionEntity.class)
				.add(Restrictions.eq("IdOrdenProd", idOrdenDeProduccio))
				.setFetchSize(1).list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		if(OrdenProd==null){
			return null;
		}else{
			return OrdenProd.get(0);
		}
	}
	
	
	@SuppressWarnings("unchecked")
	@Override
	public OrdenDeProduccionEntity getOrdenDePPoridPedido(
			long idPedido) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
			List<OrdenDeProduccionEntity> OrdenProd = (List<OrdenDeProduccionEntity>) session.createCriteria(OrdenDeProduccionEntity.class)
					.add(Restrictions.eq("IdDetallePedido", idPedido)).list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		System.out.println(OrdenProd.size());
		if(OrdenProd.size()==0){
			return null;
		}else{
			return  OrdenProd.get(0);
		}
	}

	@SuppressWarnings("unchecked")
	@Override
	public OrdenDeProduccionEntity getOrdenDeProduccionId(
			Integer idOrdenDeProduccio) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<OrdenDeProduccionEntity> OrdProd = (List<OrdenDeProduccionEntity>) session.createCriteria(OrdenDeProduccionEntity.class)
				.add(Restrictions.eq("IdOrdenProd", idOrdenDeProduccio)).list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		System.out.println(OrdProd.size());
		if(OrdProd.size()==0){
			return null;
		}else{
			return OrdProd.get(0);
			}
		}

	@SuppressWarnings("unchecked")
	@Override
	public Long getIdOrdenDePPoridPedido(
			long idPedido) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<OrdenDeProduccionEntity> OrdenProd = (List<OrdenDeProduccionEntity>) session.createCriteria(OrdenDeProduccionEntity.class)
				.add(Restrictions.eq("IdDetallePedido", idPedido)).list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		if(OrdenProd.size()>0){
			Long res = OrdenProd.get(0).getIdOrdenProd();
			System.out.println("Orden NO." + res.toString());
			return res;
		}else{
			return null;
		}
	}
	
}
